import requests
from datetime import datetime

# Django REST framework API 地址，用于将故障信息推送到该 API
API_URL = "http://222.134.245.144:17000/weizhang/VioModel/"

# 定义一个函数，用于将故障信息推送到 REST API
def send_fault_to_api(fault_info):
    """推送故障信息到 REST API"""
    try:
        # 发送 POST 请求，将故障信息以 JSON 格式发送到指定的 API 地址
        response = requests.post(API_URL, json=fault_info)
        if response.status_code == 201:
            # 如果请求成功（状态码为 201），打印成功推送的信息
            print(f"故障推送成功：{fault_info['gu_zhang_miao_shu']}")
        else:
            # 如果请求失败，打印失败信息，包含状态码和响应内容
            print(f"推送失败，状态码：{response.status_code}，响应：{response.text}")
    except requests.exceptions.RequestException as e:
        # 如果请求过程中出现异常，打印异常信息
        print(f"网络请求失败：{str(e)}")

# 定义一个函数，用于检测主泵阀门是否泄露
def zhuaq():
    # 模拟从超声流量计获取流量数据的 API 地址
    url = "http://222.134.245.144:17000/chuanganqi/Csaqf01DeviceModel/"
    # 发送 GET 请求获取数据
    response = requests.get(url)
    if response.status_code == 200:
        # 如果请求成功，将响应内容转换为 JSON 格式
        data = response.json()
        # 获取结果列表
        results = data.get("results", [])
        if not results:
            # 如果结果列表为空，打印未获取到有效数据的信息并返回
            print("未获取到有效数据")
            return
        # 获取最新的结果
        latest_result = results[-1]
        # 获取设备 ID
        xnqid = latest_result.get("id")
        # 获取流量数据，处理可能的 None 值，若为 None 则默认为 0
        xnqdata = latest_result.get("data", 0)

        if xnqdata != 0:
            # 如果流量数据不为 0，说明主泵阀门可能泄露
            print(f"主泵阀门泄露 瞬时流量为:{xnqdata}")
            # 构造故障信息
            fault_info = {
                "gu_zhang_ming_cheng": "主泵阀门泄露",
                "she_bei_ming_cheng": "主泵阀门",
                "she_bei_qu_yu": "泵组区域",
                "gu_zhang_shi_jian": datetime.now().strftime("%Y-%m-%dT%H:%M:%S"),
                "gu_zhang_lei_xing": "流量异常",
                "shi_ji_zhi": xnqdata,
                "gao_jing_zhi": 0,  # 正常流量阈值，这里假设为 0
                "gu_zhang_miao_shu": f"主泵阀门泄露，瞬时流量为 {xnqdata}，设备 ID：{xnqid}",
                "chu_li_zhuang_tai": "未处理"
            }
            # 调用 send_fault_to_api 函数推送故障信息
            send_fault_to_api(fault_info)
        else:
            # 如果流量数据为 0，说明主泵阀门未发现泄露
            print("主泵阀门泄露未发现泄露")
    else:
        # 如果请求失败，打印失败信息，包含状态码
        print(f"请求失败，状态码：{response.status_code}")

# 调用 zhuaq 函数进行主泵阀门泄露检测
zhuaq()